14. 实现
实现:策略改进
在上一节课,你学到了以下知识:如果给定策略 \pi 对应的动作值函数 q_\pi 的估值 Q,可以构建一个改进(或对等)的策略 \pi',其中 \pi'\geq\pi。
对于每个状态 s\in\mathcal{S},你只需选择最大化动作值函数估值的动作。换句话说,
\pi'(s) = \arg\max_{a\in\mathcal{A}(s)}Q(s,a),针对所有 s\in\mathcal{S}。
你可以在下方找到策略改进的完整伪代码。

如果对于某个状态 s\in\mathcal{S},其 \arg\max_{a\in\mathcal{A}(s)}Q(s,a) 不是唯一的,则可以灵活地构建改进策略 \pi'。
实际上,只要策略 \pi' 对于每个 s\in\mathcal{S} 和 a\in\mathcal{A}(s) 都满足:
\pi'(a|s) = 0 如果 a \notin \arg\max_{a'\in\mathcal{A}(s)}Q(s,a'),
它是改进策略。换句话说,(对于每个状态)任何策略只要为不会最大化动作值函数估值的动作分配概率 0,则对该状态来说就是改进策略。你可以在自己的实现中随意实验这一点!
请在下个部分完成 Dynamic_Programming.ipynb
的第 3 部分:策略改进。请记得保存内容!
你可以查看 Dynamic_Programming_Solution.ipynb
的相应部分,检查你的答案是否正确。